package com.zh.blog.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zh.blog.dto.*;
import com.zh.blog.model.Article;
import com.zh.blog.vo.*;

import java.util.List;

/**
 * @author ZhengHao
 * Created At 2022/8/4.
 **/
public interface ArticleService extends IService<Article> {
    /**
     * 后台根据ID查看文章
     * @param articleId 文章ID
     * @return 文章列表
     */
    ArticleVO getArticleBackById(Integer articleId);

    /**
     * 添加或者修改文章
     * @param articleVO 文章信息
     */
    void saveOrUpdateArticles(ArticleVO articleVO);

    /**
     * 恢复或者逻辑删除文章
     * @param deleteVO 逻辑删除对象
     */
    void updateArticleDelete(DeleteVO deleteVO);

    /**
     * 物理删除文章
     * @param articleIdList 文章ID集合
     */
    void deleteArticles(List<Integer> articleIdList);

    /**
     * 导出文章
     * @param articleIdList 文章ID列表
     * @return 文件地址
     */
    List<String> exportArticles(List<Integer> articleIdList);

    /**
     * 修改文章置顶
     * @param articleTopVO 文章置顶信息
     */
    void updateArticlesTop(ArticleTopVO articleTopVO);

    /**
     * 查询后台文章
     * @param conditionVO 条件
     * @return 文章列表
     */
    PageResult<ArticleBackDto> listArticleBacks(ConditionVO conditionVO);

    /**
     * 查询首页文章
     * @return 文章列表
     */
    List<ArticleHomeDto> listArticles();

    /**
     * 根据id查看文章
     *
     * @param articleId 文章id
     * @return 文章信息
     */
    ArticleDto getArticleById(Integer articleId);

    /**
     * 点赞文章
     *
     * @param articleId 文章id
     */
    void saveArticleLike(Integer articleId);

    /**
     * 搜索文章
     * @param conditionVO 搜索条件
     * @return 文章列表
     */
    List<ArticleSearchDto> listArticlesBySearch(ConditionVO conditionVO);

    /**
     * 查询文章归档
     * @return 文章归档列表
     */
    PageResult<ArchiveDto> listArchives();

    /**
     * 根据条件查询文章列表
     *
     * @param condition 条件
     * @return 文章列表
     */
    ArticlePreviewListDto listArticlesByCondition(ConditionVO condition);
}